<?php
abstract class ObjectManager {
	/**
	 * Function addObject
	 * @param $object : đối tượng cần thêm vào
	 * @return true/false
	 * true: thành công / false: thất bại
	 */
	abstract public function addObject($object);
	
	/**
	 * Function deleteObject
	 * @param string $id : id của đối tượng cần xóa
	 * @return true/false
	 * true: thành công / false: thất bại
	 */
	abstract public function deleteObject($id);
	
	/**
	 * Function updateObject
	 * @param string $object đối tượng cần update.
	 * Trong đối tượng này phải chứa id cần update và các thuộc tính cần update.
	 * @return true/false;
	 * true: thành công / false:thất bại
	 */
	abstract public function updateObject($object);
	
	/**
	 * Function getObjects
	 * @return danh sách các đối tượng
	 */
	abstract public function getObjects();
	
	/**
	 * Function getObjects
	 * @param int $count số dòng muốn lấy
	 * @param string $table tên bảng muốn lấy dữ liệu
	 * @return danh sách các đối tượng theo số lượng $count ở trên
	 */
	public function getObjectsLimit($table, $count){
		global $db;
		$query = "SELECT * FROM `" . $table . "` LIMIT 0 , $count";
		$result = mysqli_query ( $db, $query );
		return $result;
	}
	
	/**
	 * Function getObjects
	 * @param string $column tên bảng
	 * @param string $value giá trị so sánh của $column, lấy các dòng có giá trị này
	 * @return danh sách các đối tượng theo giá trị $value
	 */
	public function getObjectsWhereValueColumn($table, $column, $value){
		global $db;
		$query = "select * from " . $table ." where " . $column . " = ".$value;
		$result = mysqli_query ( $db, $query );
		return $result;
	}
	
	/**
	 * Function getObjects
	 * @param string $column tên bảng
	 * @param string $value giá trị so sánh của $column, lấy các dòng có giá trị này
	 * @return danh sách các đối tượng theo giá trị $value
	 */
	public function getObjectsWhereValueColumnLimit($table, $column, $value, $count){
		global $db;
		$query = "select * from " . $table ." where " . $column . " = " . $value . " LIMIT 0, " . $count;
		$result = mysqli_query ( $db, $query );
		return $result;
	}
	
	/**
	 * Function getObjectsSort
	 * @param string $column tên cột cần sắp xếp
	 * @param bool $type true: tăng dần/false: giảm dần
	 * @return danh sách các đối tượng đã sắp xếp
	 */
	public function getObjectsSort($column, $type){
		
	}
	
	/**
	 * Function findObjectsByText
	 * @param string $text Chuỗi kí tự cần tìm
	 * @return Danh sách tất cả đối tượng tìm được
	 * trả về mảng objects (acsoc array)
	 */
	abstract public function findObjectsByText($text);
	
	/**
	 * Function check
	 * @param string $id mã đối tượng cần kiểm tra
	 * @return object/null
	 * trả về object nếu kiểm tra id của đối tượng đó tồn tại, ngược lại trả về null nếu không tồn tại.
	 */
	abstract public function check($id);

	/**
	 * Function count
	 * @param string $table tên bảng cần đếm
	 * @param string $column tên cột để đếm
	 * @return int số dòng dữ liệu 
	 */
	public function count($table, $column){
		global $db;
		$query = "SELECT COUNT($column) FROM $table";
		$result = mysqli_query ( $db, $query );
		$row = mysqli_fetch_row ( $result );
		return $row [0];
	}
}